home *** CD-ROM | disk | FTP | other *** search
/ L' Effet Pommier 2 / L'Effet Pommier - Volume 02.iso / Arcade / Marathon Bonus / WAD exporters / dmfloor.c < prev    next >
C/C++ Source or Header  |  1995-03-13  |  3KB  |  150 lines

  1. #include <QDOffscreen.h>
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stddef.h>
  6.  
  7. static char wadname[]="doom.wad";
  8. static char inname[]="doom floors.exp";
  9. static unsigned char outname[]="\pdoom floors.rsrc";
  10.  
  11. void main(void)
  12. {
  13.     char fname[10];
  14.     long foff,flen;
  15.     FILE *wad,*in;
  16.     FInfo fi;
  17.     short resref;
  18.     short pictid;
  19.     OSErr err;
  20.     Rect bounds;
  21.     Ptr dres,filptr,pixptr;
  22.     CGrafPtr saveport;
  23.     GDHandle savedev;
  24.     OpenCPicParams ppar;
  25.     GWorldPtr gw;
  26.     short rowbytes;
  27.     CTabHandle ctab;
  28.     PixMapHandle pmh;
  29.     PicHandle picthand;
  30.     int i;
  31.  
  32.     puts("Ho.");
  33.     resref=OpenResFile("\pdoom colours.rsrc");
  34.     if (resref==-1) {
  35.         err=ResError();
  36.         fprintf(stderr,"OpenResFile: %d\n",err);
  37.         return;
  38.     }
  39.     ctab=GetCTable(128);
  40.     CloseResFile(resref);
  41.     if (!ctab) {
  42.         fputs("No colour table found\n",stderr);
  43.         return;
  44.     }
  45.     wad=fopen(wadname,"rb");
  46.     if (!wad) {
  47.         perror(wadname);
  48.         return;
  49.     }
  50.     in=fopen(inname,"r");
  51.     if (!in) {
  52.         perror(inname);
  53.         return;
  54.     }
  55.     CreateResFile(outname);
  56.     err=ResError();
  57.     if (err!=noErr) {
  58.         fprintf(stderr,"CreateResFile: %d\n",err);
  59.         return;
  60.     }
  61.     err=GetFInfo(outname,0,&fi);
  62.     if (err!=noErr) {
  63.         fprintf(stderr,"GetFInfo: %d\n",err);
  64.         return;
  65.     }
  66.     fi.fdType='rsrc';
  67.     fi.fdCreator='RSED';
  68.     err=SetFInfo(outname,0,&fi);
  69.     if (err!=noErr) {
  70.         fprintf(stderr,"SetFInfo: %d\n",err);
  71.         return;
  72.     }
  73.     resref=OpenResFile(outname);
  74.     if (resref==-1) {
  75.         err=ResError();
  76.         fprintf(stderr,"OpenResFile: %d\n",err);
  77.         return;
  78.     }
  79.     GetGWorld(&saveport,&savedev);
  80.     SetRect(&bounds,0,0,64,64);
  81.     err=NewGWorld(&gw,8,&bounds,ctab,NULL,keepLocal|useTempMem);
  82.     if (err!=noErr) {
  83.         fprintf(stderr,"NewGWorld: %d\n",err);
  84.         return;
  85.     }
  86.     dres=NewPtr(4096);
  87.     if (!dres) {
  88.         fprintf(stderr,"NewPtr: %d\n",MemError());
  89.         return;
  90.     }
  91.     pmh=GetGWorldPixMap(gw);
  92.     rowbytes=(*pmh)->rowBytes&0x3FFF;
  93.     SetGWorld(gw,NULL);
  94.     ClipRect(&bounds);
  95.     SetGWorld(saveport,savedev);
  96.     ppar.srcRect=bounds;
  97.     ppar.hRes=ppar.vRes=72L<<16;
  98.     ppar.version=-2;
  99.     ppar.reserved1=0;
  100.     ppar.reserved2=0;
  101.     for (pictid=128; ; pictid++) {
  102.         if (fscanf(in," %s %ld %ld",fname+1,&foff,&flen)!=3)
  103.             break;
  104.         printf("%s %ld %ld\n",fname+1,foff,flen);
  105.         if (flen!=4096) {
  106.             fprintf(stderr,"%s: Resource length error\n",fname+1);
  107.             continue;
  108.         }
  109.         if (fseek(wad,foff,SEEK_SET)) {
  110.             perror(fname+1);
  111.             continue;
  112.         }
  113.         if (fread(dres,1,4096,wad)!=4096) {
  114.             fprintf(stderr,"%s: Unexpected EOF\n",fname+1);
  115.             continue;
  116.         }
  117.         SetGWorld(gw,NULL);
  118.         LockPixels(pmh);
  119.         pixptr=GetPixBaseAddr(pmh);
  120.         filptr=dres;
  121.         for (i=64; i>0; i--) {
  122.             BlockMoveData(filptr,pixptr,64);
  123.             filptr+=64;
  124.             pixptr+=rowbytes;
  125.         }
  126.         picthand=OpenCPicture(&ppar);
  127.         CopyBits(&((GrafPtr)gw)->portBits,&((GrafPtr)gw)->portBits,
  128.                  &bounds,&bounds,srcCopy,NULL);
  129.         ClosePicture();
  130.         UnlockPixels(pmh);
  131.         SetGWorld(saveport,savedev);
  132.         fname[0]=strlen(fname+1);
  133.         AddResource((Handle)picthand,'PICT',pictid,(StringPtr)fname);
  134.         err=ResError();
  135.         if (err!=noErr) {
  136.             fprintf(stderr,"%s: AddResource: %d\n",fname+1,err);
  137.             KillPicture(picthand);
  138.             continue;
  139.         }
  140.         WriteResource((Handle)picthand);
  141.         ReleaseResource((Handle)picthand);
  142.     }
  143.     CloseResFile(resref);
  144.     fclose(wad);
  145.     fclose(in);
  146.     puts("Done!");
  147.     return;
  148. }
  149.  
  150.